#ifndef CMANAGERTAG_H_
#define CMANAGERTAG_H_
#include <iostream>
#include <fstream>
#include <list>
#include <sstream>
#include <unistd.h>
#include <sys/types.h>
#include "tipos.h"
#include "IObservadorTag.h"
#include "IObservadorEliminarTag.h"
#include "tipos.h"

class CManagerTag
{
private:
	IObservadorTag* tagsManager;
	IObservadorEliminarTag* dbFrecuencias;
	std::fstream tagFile;
	DBFrecuencias::TagId tagId;
	
	bool chequearEstado(DBFrecuencias::TagId tag);
	
	void cargarTags();
	
	void guardarTags();
public:
	CManagerTag(IObservadorTag* tagsManager);
	
	bool crearTag(DBFrecuencias::TagId id);
	
	void insertarPalabra(DBFrecuencias::TagId tag, DBFrecuencias::Palabra palabra);
	
	void eliminarPalabra(DBFrecuencias::TagId tag, DBFrecuencias::Palabra palabra);
	
	void incrementarNumeroPalabras(DBFrecuencias::TagId tag, DBFrecuencias::Frecuencia frec);
	
	void decrementarNumeroPalabras(DBFrecuencias::TagId tag, DBFrecuencias::Frecuencia frec);
	
	void eliminarTag(DBFrecuencias::TagId tag);
	
	bool eof();
	
	bool abrirTag(DBFrecuencias::TagId tag);
	
	DBFrecuencias::Palabra leerPalabra();
	
	void setFileManager(IObservadorEliminarTag* fileManager){ this->dbFrecuencias = fileManager; }
	
	virtual ~CManagerTag();
};

#endif /*CMANAGERTAG_H_*/
